package main

import "fmt"

/**
冒泡算法原理：
	数组有n个元素，就比较n-1次
	每次比较都会将本次的最大值放在左边
代码逻辑：
	第一个for是比较的次数
	第二个for是循环比较的次数，这里跳出for循环的条件格外重要
	举例：
		a 数组长度是5，所以总共会比较4次
		每次循环比较的次数：
			第一次 i=0 循环比较4次
			第二次 i=1 循环比较3次
			第三次 i=2 循环比较2次
			第四次 i=3 循环比较1次
		从上边的推理不难看出一个定律，就是循环比较的次数会随着比较的次数增加而减少，并且符合 循环比较次数+比较次数=总比较次数的规律，
		所以每次比较的次数就等于总比较次数-当前循环的次数，即：len(a) - 1 - i

 */

func main()  {
	a := [5]int{3, 5, 1, 4, 2}

	for i:= 0; i < len(a) - 1; i++ {
		for j := 0; j < len(a) - 1 - i; j++ {
			if a[j] > a[j + 1] {
				a[j], a[j + 1] = a[j + 1], a[j]
			}
		}
	}

	fmt.Println(a)
}
